package com.zuipin.service;

import java.util.List;

import com.zuipin.entity.product.PropertiesInfo;
import com.zuipin.entity.product.PropertiesVal;
import com.zuipin.framework.exception.CustomException;
import com.zuipin.framework.result.PageResult;
import com.zuipin.framework.result.Result;
import com.zuipin.util.Pagination;
import com.zuipin.vo.BackPropValViewVo;
import com.zuipin.vo.BackPropViewVo;
import com.zuipin.vo.ModityBaseProp;
import com.zuipin.vo.PropDetailVo;
import com.zuipin.vo.PropInfoSearchVo;
import com.zuipin.vo.PropValVo;
import com.zuipin.vo.PropViewSearchVo;
import com.zuipin.vo.PropertiesInfoVo;

import net.sf.json.JSONObject;

/**
 * 属性信息业务类
 *
 * @ClassName IPropertiesInfoService
 * @author wangcongyi
 * @date 2017年4月19日 下午3:40:53
 */
public interface IPropertiesInfoService {
	
	// 查询符合条件的属性信息
	public List<PropertiesInfoVo> selectPropInfo(JSONObject object);
	
	// 查询符合条件的属性值信息
	public List<PropertiesVal> selectPropVal(JSONObject object);
	
	// 查询符合条件的属性属性值信息
	public List<PropValVo> selectPropValInfo(JSONObject object);
	
	// 通过系统ID和属性ID和状态查询属性信息是否存在
	public PropertiesInfo isExists(PropertiesInfo prop);
	
	// 更新属性信息状态
	public boolean modifyState(PropertiesInfo prop);
	
	public int deleteByPrimaryKey(Long id);
	
	public int insert(PropertiesInfo record);
	
	public int insertSelective(PropertiesInfo record);
	
	public PropertiesInfo selectByPrimaryKey(Long id);
	
	public int updateByPrimaryKeySelective(PropertiesInfo record);
	
	public int updateByPrimaryKey(PropertiesInfo record);
	
	// 通过品类ID查询符合条件的属性信息
	List<PropertiesInfo> selectByCatId(JSONObject object);
	
	public Result<List<PropertiesInfo>> findPropInfo(PropInfoSearchVo propSearchVo, Pagination page);
	
	/**
	 * 查询（基础属性 分类属性 通用、平台 ）对应的属性值
	 * @param catId
	 * @param sysId
	 * @param propId
	 * @return
	 * @author zhuangjiajian
	 */
	List<PropertiesVal> findPropVal(Long propId, Long sysId, Long catId);
	
	/**
	 * 查询（基础属性 分类属性 通用、平台 ）详情信息
	 * @param propId
	 * @param catId
	 * @param sysId
	 * @return
	 */
	public PropDetailVo findPropInfoDetail(Long propId, Long catId, Long sysId);
	
	/**
	 * 判断属性是否被编辑
	 * @param propId
	 * @return
	 */
	public Result<Boolean> isCanEditProp(Long propId);
	
	/**
	 * 更新属性信息
	 * @param propId
	 * @param propVals
	 * @param updateId
	 * @param propName
	 * @param propCode
	 * @param propType
	 * @param remark
	 * @return
	 * @throws CustomException 
	 */
	public Result<Boolean> updatePropAndVal(ModityBaseProp modityBaseProp) throws CustomException;
	
	/**
	 * 添加属性信息
	 * @param propVals
	 * @param updateId
	 * @param propName
	 * @param propCode
	 * @param propType
	 * @param remark
	 * @return
	 * @throws CustomException 
	 */
	public Result<Boolean> addPropAndVal(String propVals, Long updateId, String propName, String propNo, Integer propType, String remark) throws CustomException;
	
	/**
	 * 更新分类属性信息
	 * @author zhuangjiajian
	 * @date 2017-8-15 16:20:48
	 * @param propIds
	 * @param catId
	 * @param updateId
	 * @return
	 * @throws CustomException 
	 */
	public Result updateCateProps(String propIds, Long catId, Long updateId) throws CustomException;
	
	/**
	 * @author zhuangjiajian
	 * @date 2017-8-15 16:21:23
	 * 查找分类下的  属性 属性值信息
	 * @param catId
	 * @return
	 */
	public List<PropDetailVo> findPropAndVal(Long catId);
	
	/**
	 * ID和属性值进行查询
	 * @author zhuangjiajian
	 * @date 2017-8-15 16:21:23
	 * @param search
	 * @return
	 */
	public List<PropertiesVal> findPropValByIdAndName(String search, Long propId);
	
	/**
	 * 选择性的条件进行筛选
	 * @author zhuangjiajian
	 * @date 2017-8-15 20:03:48
	 * @param search
	 * @return
	 */
	List<PropertiesInfo> selectBySelective(PropertiesInfo search);
	
	/**
	 * 更新分类属性值
	 * @author zhuangjiajian
	 * @date 2017-8-15 21:05:42
	 * @param propId
	 * @param propValIds
	 * @param catId
	 * @param updateId
	 * @return
	 */
	public Result<Boolean> updateCatePropVals(Long propId, String propValIds, Long catId, Long updateId);
	
	/**
	 * 删除分类属性下的 属性信息（通用）
	 * @author zhuangjiajian
	 * @date 2017-8-16 10:30:00
	 * @param propId
	 * @param catId
	 * @param updateId
	 * @return
	 */
	public Result delCateProps(Long propId, Long catId);
	
	/**
	 * 平台 分类属性 展示
	 * @author zhuangjiajian
	 * @date 2017-8-17 15:40:03
	 * @param catId
	 * @param sysId
	 * @param page
	 * @return
	 */
	public PageResult<List<BackPropViewVo>> showCatePropView(PropViewSearchVo searchVo, Pagination page);
	
	/**
	 * 平台 分类属性 展示设置（编辑）
	 * @param catId
	 * @param sysId
	 * @param propViewVo
	 * @return
	 */
	public Result<Boolean> setCatePropInfoViewAndPosition(Long updateId, Long catId, Long sysId, List<BackPropViewVo> propViewVo);
	
	/**
	 * 平台分类属性值 展示
	 * @param sysId
	 * @param catId
	 * @param propId
	 * @return
	 */
	public PageResult<List<BackPropValViewVo>> showCatePropValView(String device, Long sysId, Long catId, Long propId, Pagination page);
	
	/**
	 * 平台分类属性值可见性设置
	 * @param sysId
	 * @param catId
	 * @param propId
	 * @param backPropValViewVo
	 * @return
	 */
	public Result setCatePropValView(String device, Long updateId, Long sysId, Long catId, Long propId, List<BackPropValViewVo> backPropValViewVo);
	
	/**
	 * 通过propId查找对应的属性值信息列表
	 * @param propId
	 * @return
	 */
	public List<PropertiesVal> findPropValByPropId(Long propId);
	
	/**
	 * 通过参数查找商品下对应的 商品  属性-属性值列表
	 * @author zhuangjiajian
	 * @date 2017-8-23 15:20:24
	 * @param params
	 * @return
	 */
	public List<PropValVo> getPropValList(Long sysId, String productSku, String device);
	
}